﻿using System.Text;

namespace Kyoh.Lib.IO
{
    /// <summary>ファイルパス文字列に対する処理を定義します。</summary>
    public static class PathEx
    {
        /// <summary>ファイル名に使えない文字を _（アンダーバー）で置換します。</summary>
        /// <param name="name">処理対象のパス文字列。</param>
        /// <returns>ファイル名に使えない文字を置換した後の文字列。</returns>
        public static string ReplaceInvalidFileNameChars(string name)
        {
            return PathEx.ReplaceInvalidFileNameChars(name, '_');
        }

        /// <summary>ファイル名に使えない文字を置換します。</summary>
        /// <param name="name">処理対象のパス文字列。</param>
        /// <param name="replace">置換する文字。</param>
        /// <returns>ファイル名に使えない文字を置換した後の文字列。</returns>
        public static string ReplaceInvalidFileNameChars(string name, char replace)
        {
            if (name == null)
                return null;
            StringBuilder builder = new StringBuilder(name);
            foreach (var ch in System.IO.Path.GetInvalidFileNameChars())
                builder.Replace(ch, replace);
            return builder.ToString();
        }

        /// <summary>ファイル名に使えない文字を置換します。</summary>
        /// <param name="name">処理対象の文字列</param>
        /// <param name="replace">置換する文字列。</param>
        /// <returns>ファイル名に使えない文字を置換した後の文字列。</returns>
        public static string ReplaceInvalidFileNameChars(string name, string replace)
        {
            if (name == null)
                return null;
            StringBuilder builder = new StringBuilder(name);
            foreach (var ch in System.IO.Path.GetInvalidFileNameChars())
                builder.Replace(ch.ToString(), replace);
            return builder.ToString();
        }
    }
}
